<?php
/*
 * coding: utf-8
 * +-------------------------------------------------------------------
 * | KL库 - 函数模块
 * +-------------------------------------------------------------------
 * | Copyright (c) 2022-2099 KL库(https://www.fangheyun.xyz) All rights reserved.
 * +-------------------------------------------------------------------
 * | Author: 远易 <3431628590@qq.com>
 * +-------------------------------------------------------------------
 */

if(DEF_SWITCH){
    class DEF {
        /**
         * 发起GET请求
         * @param String $url 目标网填，带http://
         * @param Array|String $data 欲提交的数据
         * @return string
         */
        public function SEND_GET($url='',$data='',$time=60)
        {
            if($url == ''){
                exit("ERROR: Target URL does not exist");
            }
            $ch = curl_init();
            if(is_array($data)){
                foreach($data as $key=>$value)
                {
                    $datas = "$key=$value&".$datas;
                }
                $datas = '?'.substr($datas,0,-1);
                curl_setopt($ch, CURLOPT_URL, $url+$datas);
            }else{
                curl_setopt($ch, CURLOPT_URL, $url);
            }
            curl_setopt($ch, CURLOPT_TIMEOUT, $time);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $output = curl_exec($ch);
            curl_close($ch);
            return $output;
        }
        /**
         * 发起POST请求
         * @param String $url 目标网填，带http://
         * @param Array|String $data 欲提交的数据
         * @return string
         */
        public function SEND_POST($url='',$data='',$time=60)
        {
            if($url == ''){
                exit("ERROR: Target URL does not exist");
            }
            if(!is_array($data)){
                exit("ERROR: Submitted data error");
            }
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, $time);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $output = curl_exec($ch);
            curl_close($ch);
            return $output;
        }
        /**
         * 获取GET值
         * @VALUE GET数组中的值
         */
        public function GET($VALUE=''){
            if($VALUE == ''){
                return $_GET;
            }
            return $_GET[$VALUE];
        }
        /**
         * 获取POST值
         * @VALUE POST数组中的值
         */
        public function POST($VALUE=''){
            if($VALUE == ''){
                return $_POST;
            }
            return $_POST[$VALUE];
        }
        /**
         * 获取路径
         * @dir __FILE__或dirname(__FILE__)
         * 注: __FILE__则是当前文件所在的路径，dirname(__FILE__)则是根目录下的路径
         * @judge 为True时带 / 号，为False时不带 / 号
         */
        public function ROUTE($dir='', $judge=False){
            if($dir == ''){
                return dirname($dir);
            }
            if($judge == True){
                return dirname($dir).'/';
            }else{
                return dirname($dir);
            }
        }
        /**
         * 输出json语句
         * @array 数组(key变量=>value值)
         */
        public function json_encode($array,$judge=False){
            if($judge == False){
                return json_encode($array);
            }
            return json_encode($array, JSON_UNESCAPED_UNICODE);
        }
        /**
         * 解码json语句
         * @value json语句
         */
        public function json_decode($value=''){
            return json_decode($value, True);
        }
        /**
         * 获取随机数
         * @minimum 最小值
         * @maximum 最大值
         * 注: 取 @minimum - @maximum 之间的整数
         */
        public function sran($minimum, $maximum){
            if($minimum == '' || $maximum == ''){
                return rand(0, 1000000000);
            }
            return rand($minimum, $maximum);
        }
        /**
         * 获取随机字符（带数字）
         * @length 长度
         * 注: @length 默认为6
         */
        public function randomkeys($length=6){
            $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
            for($i=0;$i<$length;$i++)
            {
                $key .= $pattern{mt_rand(0,35)};
            } 
            return $key;
        }
        /**
         * 写入文件
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         * @content 文件内容
         * 注: 文件内容可以为空
         */
        public function fw($dir='', $content=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            return file_put_contents($dir, $content);
        }
        /**
         * 读取文件
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         */
        public function fr($dir=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            return file_get_contents($dir);
        }
        /**
         * 判断文件是否存在
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         */
        public function fe($dir=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            return file_exists($dir);
        }
        /**
         * 计算文件大小
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         * @judge 为False时返回字节，为True时返回KB、MB、GB...
         * 注: 默认为False
         */
        public function fs($dir='', $judge=False){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            if(!file_exists($dir)){
                return 'ERROR: File does not exist';
            }
            if($judge == False){
                return filesize($dir);
            }else{
                $byte = filesize($dir);
                $KB = 1024;
                $MB = 1024*$KB;
                $GB = 1024*$MB;
                $TB = 1024*$GB;
                if($byte < $KB){
                    return $byte."B";
                }else if($byte < $MB){
                    return round($byte/$KB, 2)."KB";
                }else if($byte < $GB){
                    return round($byte/$MB, 2)."MB";
                }else if($byte < $TB){
                    return round($byte/$GB, 2)."GB";
                }else{
                    return round($byte/$TB, 2)."TB";
                }
            }
        }
        /**
         * 复制文件
         * @dir 文件路径
         * @dirs 复制到某个文件夹的路径
         * 注: 路径从根目录开始计算
         * @filename 复制后的文件名称（需要带后缀）
         * 注: 如果文件名称为空则随机取名
         * @judge 为True时复制后的文件目录有当前复制文件的话会覆盖，为False反之
         * 注: 默认为True
         */
        public function fc($dir='', $dirs='', $filename='', $judge=True){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            if(!file_exists($dir)){
                exit('ERROR: File does not exist');
            }
            if($dirs == ''){
                $dirs = ROOT;
            }else{
                $dirs = ROOT.$dirs;
                if(!$judge){
                    if(file_exists($dirs)){
                        return False;
                    }
                }
            }
            if($filename == ''){
                $suffix = '.'.end(explode('.', $dir));
                $filename = rand(1000000,9999999).$suffix;
            }
            return copy($dir, $dirs.$filename);
        }
        /**
         * 移动文件
         * @dir 文件路径
         * @dirs 移动到某个文件夹的路径
         * 注: 路径从根目录开始计算
         * @judge 为True时移动后的文件目录有当前移动文件的话会覆盖，为False反之
         * 注: 默认为True
         * 注: 文件名称随机生成
         */
        public function ft($dir, $dirs='', $judge=True){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            if(!file_exists($dir)){
                exit('ERROR: File does not exist');
            }
            if($dirs == ''){
                $dirs = ROOT;
            }else{
                $dirs = ROOT.$dirs;
                if(!$judge){
                    if(file_exists($dirs)){
                        return False;
                    }
                }
            }
            if($filename == ''){
                $suffix = '.'.end(explode('.', $dir));
                $filename = rand(1000000,9999999).$suffix;
            }
            if(copy($dir, $dirs.$filename)){
                unlink($dir);
                return True;
            }else{
                return False;
            }
        }
        /**
         * 删除文件
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         */
        public function fd($dir=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            if(!file_exists($dir)){
                exit('ERROR: File does not exist');
            }
            return unlink($dir);
        }
        /**
         * 文件/目录列表
         * @dir 文件路径
         * 注: 路径从根目录开始计算
         * @judge 为空时则返回文件与目录的数组，为True时返回目录的数组，为False时返回文件的数组
         * 注: 默认为空
         */
        public function fl($dir='', $judge=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            if(!is_dir($dir)){
                exit('ERROR: directory does not exist');
            }
            $Array = array();
            $data = scandir($dir);
            foreach ($data as $value){
                if($value != '.' && $value != '..'){
                    if($judge == ''){
                        $Array[] = $value;
                    }else{
                        if($judge){
                            if(is_dir($dir.'/'.$value)){
                                $Array[] = $value;
                            }
                        }else{
                            if(!is_dir($dir.'/'.$value)){
                                $Array[] = $value;
                            }
                        }
                    }
                }
            }
            return $Array;
        }
        /**
         * 判断是否为目录
         * @dir 目录路径
         * 注: 目录路径从根目录开始计算
         */
        public function fi($dir=''){
            if($dir == ''){
                exit('ERROR: File path cannot be empty');
            }
            $dir = ROOT.$dir;
            return is_dir($dir);
        }
        
    }
}
?>